using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace KeyCore.Domain.Model
{
    public class Adres
    {
        public Adres()
        {
            // TODO default adress type
            //
            //AdresTyp = new AdresTyp();
        }

        public Guid AdresId { get; set; }
        public Nullable<Guid> DaneOsoboweId { get; set; }

        public virtual AdresTyp AdresTyp { get; set; }

        public string Ulica { get; set; }
        public string NumerDomu { get; set; }
        public string NumerLokalu { get; set; }
        public string KodPocztowy { get; set; }
        public string Poczta { get; set; }

        public virtual Miejscowosc Miejscowosc { get; set; }
        public virtual Wojewodztwo Wojewodztwo { get; set; }
        public virtual Kraj Kraj { get; set; }

        public virtual DaneOsobowe DaneOsobowe { get; set; }

        public bool HasValue
        {
            get
            {
                // checking only required fields 
                return (Miejscowosc != null)
                    || (Poczta != null)
                    || (KodPocztowy != null)
                    || (Wojewodztwo != null)
                    || (Kraj != null)
                    || (NumerDomu != null)
                    || (AdresTyp != null);
            }
        }

    }
    public class AdresConfiguration : EntityTypeConfiguration<Adres>
    {
        public AdresConfiguration()
        {
            HasKey(k => k.AdresId)
                .Property(p=>p.AdresId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        }
    }

}